package com.starpl.mobile.android.monthunsae.november.command;

import android.app.Activity;

import com.starpl.mobile.android.platform.c2dm.PushClient;
import com.starpl.mobile.android.platform.common.SharedUtil;
import com.starpl.mobile.android.platform.common.base.BaseApplication;
import com.starpl.mobile.android.platform.common.base.BaseCommand;
import com.starpl.mobile.android.platform.common.network.HttpGetConnection;
import com.starpl.mobile.android.platform.common.network.HttpHandler;
import com.starpl.mobile.android.platform.common.network.HttpPostConnection;

/**
 * 사용자 정보와 홈메뉴 정보 관련된 HTTP 요청을 처리하는 클래스
 * 
 * @author 우연화
 * @since 2011.03.16
 */
/**
 * @author Eye
 *
 */
public class MonthUnsaeCommand extends BaseCommand
{
	private static final String COUNTRY_CODE = "kr";
	private static final int TIMEZONE_OFFSET = 540;
	
	/**
	 * 로그인을 합니다.
	 * 
	 * @param httpHandler 요청처리 핸들러
	 * @param userId 사용자 아이디
	 * @param password 비밀번호
	 */
	public static void login(HttpHandler httpHandler, Activity activity, String userId, String password)
	{
		// 기존의 세션을 삭제한다.
		BaseApplication.clearSessionKey();
		
		// C2DM 푸시 알람용 디바이스 아이디
		String c2dmDeviceId = SharedUtil.getInstance().getSharedPreference("c2dmDeviceId");
		if(c2dmDeviceId == null)
		{
			PushClient.getInstance().registerPushWithoutAlarm(activity);
			c2dmDeviceId = "";
		}
		
		HttpGetConnection connection = getHttpGetConnection(httpHandler);
		connection.putParam("userId", userId);
		connection.putParam("password", password);
		connection.putParam("c2dmDeviceId", c2dmDeviceId);
		connection.executeJson("/partner/sinbiun/login");
	}
	
	/**
	 * 로그아웃을 합니다.
	 * 
	 * @param httpHandler 요청처리 핸들러
	 */
	public static void logout(HttpHandler httpHandler)
	{
		HttpGetConnection connection = getHttpGetConnection(httpHandler);
		connection.executeJson("/starpl/common/logout");
	}
	
	/**
	 * 가입테스트를 합니다. 신비운 서버와 연동하여 테스트를 진행합니다.
	 * 이 테스트 결과가 문제가 없을 경우 생일 정보를 입력받는 페이지로 이동시킵니다.
	 * 
	 * @param httpHandler 요청처리 핸들러
	 * @param userId 사용자 아이디
	 * @param nickName 닉네임
	 * @param email 이메일주소
	 */
	public static void checkJoin(HttpHandler httpHandler, String userId, String nickName, String email)
	{
		HttpPostConnection connection = getHttpPostConnection(httpHandler);
		connection.putParam("userId", userId);
		connection.putParam("nickName", nickName);
		connection.putParam("email", email);
		connection.executeJson("/partner/sinbiun/join/check");
	}
	
	/**
	 * 사용가능한 생일인지 확인합니다.
	 * 
	 * @param httpHandler 요청처리 핸들러
	 * @param birthDate 생일 (yyyy-MM-dd)
	 */
	public static void checkBirthDate(HttpHandler httpHandler, String birthDate)
	{
		HttpPostConnection connection = getHttpPostConnection(httpHandler);
		connection.putParam("birthDate", birthDate);
		connection.executeJson("/partner/sinbiun/join/check/birthdate");
	}
	
	/**
	 * 회원가입을 수행합니다.
	 * 
	 * @param httpHandler 요청처리 핸들러
	 * @param activity 디바이스별 푸시아이디를 알아오는데 사용되는 엑티비티
	 * @param userId 사용자 아이디
	 * @param password 비밀번호
	 * @param nickName 닉네임
	 * @param email 이메일주소
	 * @param userName 실명
	 * @param cellPhone 전화번호
	 * @param birthDate 생일 (yyyy-MM-dd)
	 * @param lunarType 윤달여부 (양력:0, 일반음력:1, 윤달음력:2)
	 * @param sexFlag 성별(남자:1, 여자:0)
	 */
	public static void join(HttpHandler httpHandler, Activity activity, String userId, String password,
			String nickName, String email, String userName, String cellPhone, String birthDate,
			int lunarType, int sexFlag)
	{
		// 기존의 세션을 삭제한다.
		BaseApplication.clearSessionKey();
		
		// C2DM 푸시 알람용 디바이스 아이디
		String c2dmDeviceId = SharedUtil.getInstance().getSharedPreference("c2dmDeviceId");
		if(c2dmDeviceId == null)
		{
			PushClient.getInstance().registerPushWithoutAlarm(activity);
			c2dmDeviceId = "";
		}
		
		HttpPostConnection connection = getHttpPostConnection(httpHandler);
		connection.putParam("userId", userId);
		connection.putParam("password", password);
		connection.putParam("nickName", nickName);
		connection.putParam("email", email);
		connection.putParam("isAutoLogin", "false");
		connection.putParam("c2dmDeviceId", c2dmDeviceId);
		connection.putParam("userName", userName);
		connection.putParam("cellPhone", cellPhone);
		connection.putParam("birthDate", birthDate);
		connection.putParam("lunarType", lunarType);
		connection.putParam("sexFlag", sexFlag);
		connection.putParam("countryCode", COUNTRY_CODE);
		connection.putParam("timeZoneOffset", TIMEZONE_OFFSET);
		connection.executeJson("/partner/sinbiun/join");
	}
	
	/**
	 * 회원정보를 수정합니다.
	 * 
	 * @param httpHandler 요청처리 핸들러
	 * @param activity 디바이스별 푸시아이디를 알아오는데 사용되는 엑티비티
	 * @param birthDate 생일
	 * @param userName 실명
	 * @param cellPhone 전화번호
	 * @param lunarType 윤달여부 (양력:0, 일반음력:1, 윤달음력:2)
	 * @param sexFlag 성별(남자:1, 여자:0)
	 */
	public static void updateUserInfo(HttpHandler httpHandler, Activity activity, String birthDate, String userName, String cellPhone, 
			int lunarType, int sexFlag)
	{
		// C2DM 푸시 알람용 디바이스 아이디
		String c2dmDeviceId = SharedUtil.getInstance().getSharedPreference("c2dmDeviceId");
		if(c2dmDeviceId == null)
		{
			PushClient.getInstance().registerPushWithoutAlarm(activity);
			c2dmDeviceId = "";
		}
		
		HttpPostConnection connection = getHttpPostConnection(httpHandler);
		connection.putParam("birthDate", birthDate);
		connection.putParam("userName", userName);
		connection.putParam("cellPhone", cellPhone);
		connection.putParam("lunarType", lunarType);
		connection.putParam("sexFlag", sexFlag);
		connection.putParam("c2dmDeviceId", c2dmDeviceId);
		connection.executeJson("/partner/sinbiun/user/info/update");
	}
	
	/**
	 * 홈화면에서 사용하는 메인 정보 목록을 가져옵니다.
	 * 
	 * @param httpHandler 요청처리 핸들러
	 */
	public static void getMainAlarm(HttpHandler httpHandler)
	{
		HttpGetConnection connection = getHttpGetConnection(httpHandler);
		connection.executeJson("/partner/sinbiun/main/alarm");
	}
	
	/**
	 * 어플리케이션의 설정정보를 가져옵니다. 운세 이슈는 서버에서 받아오지 않습니다.
	 * 
	 * message : 쪽지
	 * comment : 댓글
	 * event : 새로운 이벤트
	 * pushStartTime : 푸시 시작시각
	 * pushEndTime : 푸시 종료시각
	 * 
	 * @param httpHandler 핸들러
	 */
	public static void getConfiguration(HttpHandler httpHandler)
	{
		HttpGetConnection connection = getHttpGetConnection(httpHandler);
		connection.executeJson("/partner/sinbiun/system/info");
	}
	
	/**
	 * 어플리케이션의 설정 정보를 변경합니다.
	 * 
	 * @param httpHandler 요청처리 핸들러
	 * @param type message:쪽지, comment:댓글, event:새로운이벤트
	 * @param value 푸시를 받을지 말지 여부
	 */
	public static void setConfiguration(HttpHandler httpHandler, String type, boolean value)
	{
		String onoff = value ? "on" : "off";
		HttpGetConnection connection = getHttpGetConnection(httpHandler);
		connection.executeJson("/partner/sinbiun/system/info/update/" + type + "/" + onoff);
	}
	
	/**
	 * 월별 운세 데이터를 가져옵니다.
	 * 
	 * data:
	 * 	WeekName 일자/요일 (01(화))
	 * 	v0 운세아이콘 (용신 : 1 아주좋음)
	 * 	DayContent 운세내용
	 * 	Money_num 재물운 (1:좋은날, -1:조심해야하는날, 0:아무것도아님)
	 * 	Love_num 애정운 (1:좋은날, -1:조심해야하는날, 0:아무것도아님)
	 * extData1:
	 * 	MONEY 달력 아래에 표시되는 재물운
	 * 	LOVE 달력 아래에 표시되는 연애운 
	 * 
	 * @param httpHandler 요청처리 핸들러
	 */
	public static void getMonthUnsae(HttpHandler httpHandler)
	{
		String month = BaseApplication.getConfigPersistent("monthNumber");
		HttpGetConnection connection = getHttpGetConnection(httpHandler);
		connection.executeJson("/partner/sinbiun/month/" + month);
	}
	
	/**
	 * 푸시를 받을 시간을 변경합니다.
	 * 
	 * @param httpHandler 요청처리 핸들러
	 * @param pushStartTime 푸시 시작시각 (0~23)
	 * @param pushEndTime 푸시 종료 시각 (1~24)
	 */
	public static void updatePushTime(HttpHandler httpHandler, int pushStartTime, int pushEndTime)
	{
		HttpPostConnection connection = getHttpPostConnection(httpHandler);
		connection.putParam("pushStartTime", pushStartTime);
		connection.putParam("pushEndTime", pushEndTime);
		connection.executeJson("/partner/sinbiun/system/info/update/time");
	}
}
